package simpledb.execution;

import simpledb.common.DbException;
import simpledb.transaction.TransactionAbortedException;

import java.util.NoSuchElementException;

/**
 * IndexOpIterator 是 SimpleDB 中索引访问方法所实现的接口。
 *
 * 它扩展了 OpIterator 接口，提供了基于索引扫描的基本操作，
 * 主要用于支持通过索引谓词（IndexPredicate）来高效地遍历满足条件的数据。
 */
public interface IndexOpIterator extends OpIterator {

    /**
     * 打开索引扫描器，并准备根据指定的索引谓词开始遍历数据。
     *
     * 调用此方法后，调用 getNext() 或 next() 将返回满足该谓词的元组。
     *
     * @param ipred 用于扫描索引的查询条件（包含操作符和比较值）
     * @throws NoSuchElementException 如果没有匹配的元组
     * @throws DbException 数据库相关异常
     * @throws TransactionAbortedException 如果事务被中止
     */
    void open(IndexPredicate ipred) throws NoSuchElementException, DbException, TransactionAbortedException;

    /**
     * 重新开始一次新的索引扫描，使用指定的谓词重置迭代器状态。
     *
     * 此方法通常用于在已经打开的迭代器上更换查询条件并重新开始遍历。
     *
     * @param ipred 新的索引查询条件
     * @throws DbException 数据库相关异常
     * @throws TransactionAbortedException 如果事务被中止
     */
    void rewind(IndexPredicate ipred) throws DbException, TransactionAbortedException;
}
